home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SORTING.SWG / 0017_Quick Sort.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  1KB  |  52 lines

  1. { File that will teach me how to quick sort?  I know how quick sort works
  2.  but I don't know why my Program doesn't sort properaly.  Sometimes it goes
  3.  through one cycle of sort and sometimes it goes through two cycles of sort
  4.  but it never sorts it Completely! Tek Chan
  5.  
  6. Here is some generic source code, change it to suit your needs/Types:
  7. }
  8.  
  9. Procedure Split(Var Info: ArrayType; First: Integer; Last: Integer; Var
  10. SplitPt1: Integer; Var SplitPt2: Integer);
  11.  
  12. Var SplitVal, Temp: ArrayElementType;
  13.  
  14. begin
  15.   SplitVal:=Info[(First+Last) div 2];
  16.   Repeat
  17.     While Info[First] < SplitVal do
  18.       First:=First+1;
  19.     While Info[Last] > SplitVal do
  20.       Last:=Last-1;
  21.     if First <= Last then
  22.       begin
  23.         Temp:=Info[First];
  24.         Info[First]:=Info[Last];
  25.         Info[Last]:=Temp;
  26.         First:=First+1;
  27.         Last:=Last-1;
  28.       end
  29.   Until First > Last;
  30.   SplitPt1:=First;
  31.   SplitPt2:=Last;
  32. end;
  33.  
  34. Procedure QuickSort(Var Info: ArrayType;  First:Integer;  Last: Integer);
  35.  
  36. Var SplitPt1, SplitPt2: Integer;
  37.  
  38. begin
  39.   if First < Last then
  40.     begin
  41.       Split(Info, First, Last, SplitPt1, SplitPt2);
  42.       if SplitPt1 < Last
  43.         then QuickSort(Info, SplitPt1, Last);
  44.       if First < SplitPt2
  45.         then QuickSort(Info, First, SplitPt2);
  46.     end
  47. end;
  48.  
  49. {
  50. This is a -very- fast sort, much faster than any other I have.  Does a
  51. non-recursive version exist?  Are there any faster sorts?   Brian
  52. }